//
//  Cocoapods私有库.swift
//  Documentation
//
//  Created by Toj on 4/10/23.
//

https://www.jianshu.com/p/156cff56a91d

# 向online公共组件库添加组件
目前组件采用cocoapods的方式，后续会陆续支持Carthage，Swift Package Manager。

## 1.新建pod

如果已经有创建好的pod，请直接跳到第 2 步。

### 通过cocoapods创建pod
### 1)cocoapods提供了创建pod的模版。
在命令行输入：

```
$ cd 准备创建pod的目录
$ pod lib create iOSComponents
```

**iOSComponents** 就是你的的pod名称。执行后，会提供选择项，按照你的需要选择即可。
执行完，项目目录结构如下所示：

```
├── Example                                #demo
│   ├── Podfile                                #cocoapods 依赖文件
│   ├── Podfile.lock
│   ├── Pods
│   ├── Tests
│   ├── iOSComponents
│   ├── iOSComponents.xcodeproj
│   └── iOSComponents.xcworkspace
├── LICENSE
├── README.md
├── iOSComponents
│   ├── Assets                            #资源文件
│   └── Classes                            #源文件
├── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
└── iOSComponents.podspec                    #pod的配置文件
```

#### 2)将写好的组件拷贝到Classes文件夹。

#### 3)编辑iOSComponents.podspec。例如：

```
#
# Be sure to run `pod lib lint iOSComponents.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'iOSComponents'
  s.version          = '0.1.0'
  s.summary          = 'compenents for StarTimes.'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
  a set of UI components for reused
                       DESC

  s.homepage         = 'http://10.0.250.70:8088/startimesapp/iOSComponents'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'zhaozh' => 'zhaozh@startimes.com.cn' }
  s.source           = { :git => 'http://10.0.250.70:8088/startimesapp/iOSComponents.git', :tag => s.version.to_s }

  s.ios.deployment_target = '8.0'
  s.source_files = 'iOSComponents/Classes/**/*'
  s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.0' }
end
```

[更详细的podspec配置Guide](https://guides.cocoapods.org/syntax/podspec.html)

#### 4)校验iOSCompenents.podspec的正确性

执行命令

```
$ pod lib lint
```

如果出现 *warning* 或者 *error* ，要修正，直到校验通过。
校验通过如下：

```
 -> iOSComponents (0.1.0)

iOSComponents passed validation.
```

#### 5)通过example工程测试pod是否可用。
执行

```
$ cd Example
$ pod update
```
然后build工程

建议：

* 最好在example工程编写demo，测试下组件是否可用。
* 如果是源文件是 swift，注意access control

#### 6)提交pod到远程仓库

通过cocoapods命令行创建的工程，已在本地git的管理下。

```
$ git remote add origin http://10.0.250.70:8088/startimesapp/iOSComponents.git
$ git status
$ git add .
$ git commit -m "iOSComponents init"
$ git push -u origin master

```

不要忘记打标签，与 **iOSComponents.podspec** 的 *version* 保持一致。

```
$ git tag 0.1.0
$ git push --tags
```
#### 7)校验远程仓库
执行命令

```
$ pod spec lint
```

如果出现 *warning* 或者 *error* ，要修正，直到校验通过。
校验通过如下：

```

 -> iOSComponents (0.1.0)

Analyzed 1 podspec.

iOSComponents.podspec passed validation.
```

## 2.添加podspec到online specs仓库

#### 1)将online specs仓库添加到本地

执行如下命令：

```
$ pod repo add iOSSpecs http://10.0.250.70:8088/startimesapp/iOSSpecs.git
```

成功后，可到 *~/.cocoapods/repos* 查看

或者通过 `pod repo list` 查看，结果如下所示：

```
iOSSpecs
- Type: git (master)
- URL:  http://10.0.250.70:8088/startimesapp/iOSSpecs.git
- Path: /Users/zhaozh/.cocoapods/repos/iOSSpecs

master
- Type: git (master)
- URL:  https://github.com/CocoaPods/Specs.git
- Path: /Users/zhaozh/.cocoapods/repos/master
```


#### 2)向online specs仓库提交podspec
执行：

```
$ pod repo push iOSSpecs xxx.podspec
```

xxx.podspec 为你要提交到组件库的组件podspec

成功如下所示：

```
xxxMacBook-Pro:iOSComponents xxx$ pod repo push iOSSpecs xxx.podspec

Validating spec
 -> xxx (0.1.0)

Updating the `iOSSpecs' repo

Already up-to-date.

Adding the spec to the `iOSSpecs' repo

 - [Update] xxx (0.1.0)

Pushing the `iOSSpecs' repo

To http://10.0.250.70:8088/startimesapp/iOSSpecs.git
   d29b626..99770ca  master -> master
```

查看online specs仓库，可以发现 xxx.podspec。
现在可以通过 `pod search xxx ` 搜索到库了。

## 3.使用私有仓库中的pods

使用我们自己的sepcs仓库的库时，需要在Podfile中 添加 `source 'http://10.0.250.70:8088/startimesapp/iOSSpecs.git'`,

想在使用我们自己私有仓库的库的同时，使用 cocoapods 三方库，需要同时添加
`source 'https://github.com/CocoaPods/Specs.git'`


## 4.其他建议
* 更新维护pod流程
    >1.更改源文件
    
    >2.编辑podspec
    
    >3.本地校验podspec
    
    >4.通过example工程测试pod是否可用
    
    >5.提交pod到远程仓库
    
    >6.校验远程仓库
    
    >7.向specs仓库提交podspec
    
    
* 私有specs仓库本质上是 git 仓库，支持git的一切操作
